package com.foreknow.proxy;

import javax.xml.crypto.dom.DOMCryptoContext;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 动态代理的核心处理类:一定要实现InvocationHandler这个接口
 */
public class ProxyHandler implements InvocationHandler {
    //设置一个目标对象(DogImpl)
    Object targer;
    //通过set方法给目标对象初始化
    public void setTarger(Object targer) {
        this.targer = targer;
    }
    DogInterceptor interceptor = new DogInterceptor();

    //InvocationHandler 是代理实例的调用处理程序 实现的接口。
    //proxy:表示要调用方法所属的对象
    //method:要调用的目标方法
    //args:参数
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if (method.getName().equals("info")){
            interceptor.beginTransection();//调用方法之前操作
            //调用目标对象中的info方法
            method.invoke(targer,args);
            interceptor.commitTransection();//调用方法之后操作
        }else {
            method.invoke(targer,args);
        }
        return null;
    }
}
